/*
 * Programa Principal
 * TP2 - Encastre
 *
 * Integrantes:
 *
 * Cabrera, Jorge
 * Correa,Joel
 * Samoluk, German
 * Vedia,Martin
 * Weber,Santiago
 *
 */

#include "Pieza.h"
#include "Tablero.h"
#include "Graficador.h"
#include "Catalogo.h"
#include "LectorDePiezas.h"
#include "Secuencia.h"

#define COMPILAR_PROGRAMA_PRINCIPAL_TP2

#ifdef COMPILAR_PROGRAMA_PRINCIPAL_TP2

#define ANCHO_PIEZA 2
#define ALTURA_PIEZA 3
#define ANCHO_TABLERO 10
#define ALTURA_TABLERO 10
#define PROGRAMA_FINALIZO_CORRECTAMENTE 1
#define PROGRAMA_FINALIZO_ERRONEAMENTE -1

int main(int argc,char** argv) {

	Catalogo catalogoDePiezas;
	Pieza* punteroAPieza;
	LectorDePiezas lector;
	Secuencia secuenciaAInsertar;
	Tablero tableroTP2,tableroTP1;
	Graficador graficadorDeTablero;
	string cadenaDeEntrada;

	if (argc>1){	//solo comprueba que haya al menos un argumento, y lee el primer argumento, ignorando el resto.
		cadenaDeEntrada= argv[1];
	} else cadenaDeEntrada="secuencia_por_defecto";

	cout << "Se procede a leer la secuencia contenida en el archivo " << cadenaDeEntrada << ".txt" << endl;

	lector.getSecuencia(cadenaDeEntrada + ".txt",&secuenciaAInsertar);	//agrega la extension .txt al final.
	if ((lector.getAnchoTablero()==0)||(lector.getLargoTablero()==0)){
		cout << "Error! Archivo " << cadenaDeEntrada << ".txt no encontrado o con formato invalido!!" << endl;
		cout << "Uso del programa:" << endl;
		cout << "programaTP2.exe \"archivo_a_leer\" " << endl;
		return PROGRAMA_FINALIZO_ERRONEAMENTE;
	}
	tableroTP1.setDimensiones(lector.getAnchoTablero(),lector.getLargoTablero());
	tableroTP2.setDimensiones(lector.getAnchoTablero(),lector.getLargoTablero());
	while (!(secuenciaAInsertar.vacia())){
		punteroAPieza=secuenciaAInsertar.sacarPieza();
		if (punteroAPieza==NULL) cout << "Se rechazo una pieza, no corresponde a una pieza valida. ";
		tableroTP1.insertarPiezaTP1(punteroAPieza);
		tableroTP2.insertarPieza(punteroAPieza);
		delete punteroAPieza;
	}

	cout << "el nivel de ocupacion del tablero TP2 para esta secuencia es de: " << tableroTP2.calcularNivelDeOcupacion() << endl;
	cout << "el nivel de ocupacion del tablero TP1 para esta secuencia es de: " << tableroTP1.calcularNivelDeOcupacion() << endl;

	graficadorDeTablero.imprimirTablero(&tableroTP1,cadenaDeEntrada + "_EstiloTP1"); //nombre del archivo txt + estilo de insercion en el TP
	graficadorDeTablero.imprimirTablero(&tableroTP2,cadenaDeEntrada + "_EstiloTP2");
}

#endif
